package com.wanshu.sys.controller;

import com.wanshu.common.annotation.SysLogger;
import com.wanshu.common.constant.SystemConstant;
import com.wanshu.common.util.PageUtils;
import com.wanshu.sys.entity.SysMenu;
import com.wanshu.sys.model.SysMenuQueryDto;
import com.wanshu.sys.service.ISysMenuService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 * 菜单管理 前端控制器
 * </p>
 *
 * @author 波哥
 * @since 2023-05-09
 */
@Api(tags = "系统菜单", value = "系统菜单管理")
@Controller
@RequestMapping("/sys/sysMenu")
public class SysMenuController {

    @Resource
    private ISysMenuService sysMenuService;

    /**
     * 分页查询
     *
     * @param dto dto
     * @return {@link PageUtils }<{@link SysMenu }>
     * @author 张颖辉（zyh）
     * @date 2023/07/11
     * @version 1.0.0
     */
    @ApiOperation(value = "分页查询菜单", notes = "系统菜单分页数据，以及关联的子菜单")
    @GetMapping("list")
    public PageUtils<SysMenu> list(SysMenuQueryDto dto) {
        return sysMenuService.listPage(dto);
    }

    /**
     * 查询全量父菜单（一级菜单）
     *
     * @return {@link List }<{@link SysMenu }>
     * @author 张颖辉（zyh）
     * @date 2023/07/11
     * @version 1.0.0
     */
    @ApiOperation(value = "查询父菜单", notes = "查询父菜单信息")
    @GetMapping("listParentMenu")
    public List<SysMenu> listParentMenu() {
        return sysMenuService.listParentMenu();
    }

    /**
     * 保存
     *
     * @param sysMenu 系统菜单
     * @return {@link String }
     * @author 张颖辉（zyh）
     * @date 2023/07/11
     * @version 1.0.0
     */
    @SysLogger("新增或修改系统菜单") //controller中也可以记录日志
    @ApiOperation(value = "保存菜单", notes = "新增/更新菜单信息")
    @PostMapping("save")
    public String save(@RequestBody SysMenu sysMenu) {
        sysMenuService.saveSysMenu(sysMenu);
        return SystemConstant.RES_SUCCESS;
    }

    /**
     * 通过id查询菜单
     *
     * @param menuId 菜单id
     * @return {@link SysMenu }
     * @author 张颖辉（zyh）
     * @date 2023/07/11
     * @version 1.0.0
     */
    @ApiOperation(value = "根据id查询菜单", notes = "根据id查询菜单")
    @GetMapping("queryMenuById")
    public SysMenu queryMenuById(Long menuId) {
        return sysMenuService.queryMenuById(menuId);
    }

    /**
     * 删除通过id
     *
     * @param menuId 菜单id
     * @author 张颖辉（zyh）
     * @date 2023/07/11
     * @version 1.0.0
     */
    @ApiOperation(value = "根据ID删除菜单", notes = "根据ID删除菜单")
    @PostMapping("deleteById")
    public void deleteById(Long menuId) {
       sysMenuService.deleteById(menuId);
    }

    /**
     * 查询用户菜单 前端初始化菜单时调用
     *
     * @author 张颖辉（zyh）
     * @date 2023/07/18
     * @version 1.0.0
     */
    @ApiOperation(value = "查询用户的菜单", notes = "查询用户的菜单")
    @GetMapping("getUserMenus")
    public List<SysMenu> getUserMenus(){
        return  sysMenuService.getUserMenus();
    }

}
